package sv.gob.mtps.colectivas.controller;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.User;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;

import sv.gob.mtps.colectivas.model.TbExpediente;
import sv.gob.mtps.colectivas.model.TbExpedienteEstado;
import sv.gob.mtps.colectivas.model.TbExpedienteResultado;
import sv.gob.mtps.colectivas.service.CatalogosService;
import sv.gob.mtps.colectivas.service.ExpedienteService;

@Component
@Controller
public class ExpedienteController {
	
	@Autowired
	ExpedienteService expedienteService;
	
	@Autowired
	CatalogosService catalogosService;
	
	@RequestMapping(value = "/admin/showExpedientes")
	public  String showFondos(@ModelAttribute("expediente") TbExpediente tbExpediente,Map<String, Object> map){
		map.put("expedientesList", expedienteService.listExpedientes());
		return "admin/expedientes";
	}
	
	//
	
	@RequestMapping(value = "/admin/showResultado")
	public  String showResultado(@ModelAttribute("expediente") TbExpediente tbExpediente,Map<String, Object> map){
		TbExpedienteResultado resultado = new TbExpedienteResultado();
		resultado.setTbExpediente(tbExpediente);
		map.put("res", resultado);
		map.put("resultadosList", expedienteService.listExpedienteResultados(tbExpediente.getIdExpediente()));
		map.put("catResultadoList", catalogosService.listResultados());
		return "admin/resultadoExpediente";
	}
	
	@RequestMapping(value = "/admin/show_Resultado")
	public  String show_Resultado(@ModelAttribute("res") TbExpedienteResultado resultado,Map<String, Object> map, HttpServletRequest request){
		String id = request.getParameter("idExpediente");
		TbExpediente exp = expedienteService.findExpediente(Integer.valueOf(id));
		resultado.setTbExpediente(exp);
		map.put("res", resultado);
		map.put("resultadosList", expedienteService.listExpedienteResultados(exp.getIdExpediente()));
		map.put("catResultadoList", catalogosService.listResultados());
		return "admin/resultadoExpediente";
	}
	
	@RequestMapping(value = "/admin/addResultado")
	public  String addResultado(@ModelAttribute("res") TbExpedienteResultado resultado, BindingResult result, Map<String, Object> map){
		if(!result.hasErrors()){
			System.out.println(resultado.getFechaResultado());
			expedienteService.addResultado(resultado);
			return "redirect:/admin/show_Resultado?idExpediente="+resultado.getTbExpediente().getIdExpediente();
		}else{
			return "admin/resultadoExpediente";	
		}
		
	}
	
	@RequestMapping(value = "/admin/editResultado")
	public  String editResultado(@ModelAttribute("res") @Valid TbExpedienteResultado resultado, BindingResult result, Map<String, Object> map){
		if(!result.hasErrors()){
			expedienteService.editResultado(resultado);
			return "redirect:/admin/show_Resultado?idExpediente="+resultado.getTbExpediente().getIdExpediente();
		}else{
			return "admin/resultadoExpediente";	
		}
		
	}
	
	@RequestMapping(value = "/admin/deleteResultado")
	public  String deleteResultado(@ModelAttribute("res") @Valid TbExpedienteResultado resultado, BindingResult result, Map<String, Object> map){
		if(!result.hasErrors()){
			expedienteService.deleteResultado(resultado.getIdExpedienteResultado());
			return "redirect:/admin/show_Resultado?idExpediente="+resultado.getTbExpediente().getIdExpediente();
		}else{
			return "admin/resultadoExpediente";	
		}
		
	}
	
	//
	
	@RequestMapping(value = "/admin/showEEstado")
	public  String showEEstado(@ModelAttribute("expediente") TbExpediente tbExpediente,Map<String, Object> map){
		TbExpedienteEstado eestado = new TbExpedienteEstado();
		eestado.setTbExpediente(tbExpediente);
		map.put("eestado", eestado);
		map.put("eestadosList", expedienteService.listEstadosExpediente(tbExpediente.getIdExpediente()));
		map.put("estadosList", catalogosService.listEstados());
		return "admin/estadoExpediente";
	}
	
	@RequestMapping(value = "/admin/addEEstado")
	public  String showEEstado(@ModelAttribute("eestado") TbExpedienteEstado tbExpedienteEstado, Map<String, Object> map){
		try{
			tbExpedienteEstado.setFechaFin(tbExpedienteEstado.getFechaInicio());
			
			User user = (User)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
		    String delegado = user.getUsername();
		    
			tbExpedienteEstado.setDelegado(delegado);
			expedienteService.addExpedienteEstado(tbExpedienteEstado);
			
			return "redirect:/admin/show_EEstado?idExpediente="+tbExpedienteEstado.getTbExpediente().getIdExpediente();
		}
		catch(Exception ex){
			System.out.println(ex.getMessage());
		}
		
		return "";
	}
	
	@RequestMapping(value = "/admin/show_EEstado")
	public  String show_EEstado(@ModelAttribute("eestado") TbExpedienteEstado tbExpedienteEstado,Map<String, Object> map, HttpServletRequest request){
		String id = request.getParameter("idExpediente");
		TbExpediente exp = expedienteService.findExpediente(Integer.valueOf(id));
		map.put("eestado", tbExpedienteEstado);
		map.put("eestadosList", expedienteService.listEstadosExpediente(exp.getIdExpediente()));
		map.put("estadosList", catalogosService.listEstados());
		return "admin/estadoExpediente";
	}
}
